# Reverse digits of an integer.

# Example1: x = 123, return 321
# Example2: x = -123, return -321

import math

#65 ms
class Solution_1(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """

        if x == 0:
            return 0

        result = 0 #结果
        isNag = x < 0 #是否为负数

        #将负数转换为正数
        if isNag:
            x = -x

        #位数
        digit = math.floor(math.log10(x)) + 1

        #从最高位开始计算
        n = digit - 1
        while n > -1:
            m = math.floor(x / 10 ** n) #最高位的数
            result += m * (10 ** (digit - n - 1)) #结果加上 最高位的数 乘以 反转后的位数

            x -= m * (10 ** n) #去掉最高位
            n -= 1 #次高位

        #结果溢出处理
        if result > 2 ** 31 - 1:
            return 0

        #负数添加负号
        if isNag:
            result = -result

        return int(result)

#52 ms
class Solution_2(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """

        if x == 0:
            return 0

        result = 0 #结果
        isNag = x < 0 #是否为负数

        #将负数转换为正数
        if isNag:
            x = -x

        while x != 0:
            result = result * 10 + x % 10 #结果添加一个最低位（result为0时除外）并加上原数的最低位
            x = x // 10 #去掉最低位

        #结果溢出处理
        if result > 2 ** 31 - 1:
            return 0

        #负数添加负号
        if isNag:
            result = -result

        return result


#test
solution = Solution_1()
result = solution.reverse(1534236469)

print("\n", "/////////////////////////////////////////////////", "\n")
print(result)
print("\n", "/////////////////////////////////////////////////", "\n")